package Calculadora;

import java.util.ArrayList;

/**
 * Implementacion de Stack por medio de ArrayList
 * @author Vinicio Gomez
 * @since 12/08/2012
 * @version 1.0
 * @see Stack
 */
public class StackArrayList<E> extends AbstractStack {
    /**Stack implementado por medio de clase ArrayList*/
    ArrayList<E> data;
    
    /**
     * Constructor
     * @pre n/a
     * @post instacia de nueva stack
     * @since 12/08/2012
     */
    public StackArrayList (){
        data = new ArrayList<E>();
    }
    
    /**
     * Ingresa un objeto al inicio de la pila
     * @param item objeto a ingresar
     * @pre n/a
     * @post el objeto es agregado
     * @since 12/08/2012
     * @see Stack
     */
    @Override
    public void push(Object item){
       data.add((E)item); 
    }

    /**
     * Saca el ultimo objeto agregado a la pila
     * @return el ultimo objeto agregado a la pila
     * @pre que la pila no este vacia
     * @post el ultimo objeto agregado a la pila es removido de la misma
     * @since 12/08/2012
     * @see Stack
     */
    @Override
    public Object pop() {
        return data.remove(size()-1); 
    }

    /**
     * Se obtiene la referencia del ultimo objeto agregado a la pila
     * @return la referencia del ultimo objeto agregado a la pila
     * @pre que la pila no este vacia
     * @post se retorna la referencai del ultimo objeto agregado a la pila
     * @since 12/08/2012
     * @see Stack
     */
    @Override
    public Object peek() {
        return data.get(size() - 1);
    }

    /**
     * Se determina la cantidad de objetos dentro de la pila
     * @return la cantidad de objetos dentro de la pila
     * @pre n/a
     * @post se retorna la cantidad de objetos dentro de la pila
     * @see Stack
     */
    @Override
    public int size() {
        return data.size();
    }
    
}